package com.cy.pj.module.controller;

import com.cy.pj.module.pojo.RequestParameter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * 在此Controller中 演示请求参数的处理
 */


@RestController
public class ParamObjectController {
    /*
    * http://localhost/doParam?name=mvc
    * 基于直接量参数来接收请求中的数据,
    * */

    @GetMapping("/doParam")         //匹配的是get方法的请求
//    @RequestMapping("/doParam1")    // 默认可以处理所有类型的请求, 可以设置参数来限定他的使用范围
    public String doMethodParam(String name){
//        返回值是一个字符串, 如果没有加@ResponseBody, 他就认为 传入的是一个页面, 框架就会去寻找, 就会报找不到模版的错误
        return "request params : " + name;
    }


    @GetMapping("/doParam1")
    /* 给对象传递值的时候, 框架根据对象中的set方法匹配, 如果匹配, 取到的值为null*/
    public String doMethodParam2(RequestParameter rp){
//        使用POJO对象对象作为方法参数接收客户端参数数据时, POJO对象 中应该提供与客户端参数名相匹配的set方法
        return "request params : " + rp.toString();
    }


    /* 使用Map对象传递参数*/
    @GetMapping("/doParam2")
//    1. Map对象作为参数, 默认是用来封装响应到客户端的数据, 所以作为接收参数时, 必须添加@RequestParam注解
    public String doMethodParam3(@RequestParam Map<String, Object> map){
//        2.作为接收参数时, 不会对数据的名称进行校验, 而是将所有的数据全部存储
        return "request params : " + map.toString();
    }

}
